package com.bfly.mall.order.service;

import com.bfly.core.base.service.IBaseService;
import com.bfly.core.enums.AccessRole;
import com.bfly.mall.admin.entity.Admin;
import com.bfly.mall.order.dto.OrderRefundFormDTO;
import com.bfly.mall.order.entity.OrderRefund;
import com.bfly.mall.order.enums.RefundProgressEnum;
import com.bfly.mall.order.enums.RefundTypeEnum;

/**
 * 订单申请退款日志
 *
 * @author 长沙商脉科技有限公司
 * @date 2020/4/19 19:03
 */
public interface IOrderRefundService extends IBaseService<OrderRefund, Integer> {

    /**
     * 获得订单最新的一条退款申请单
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/10/8 21:32
     */
    OrderRefund getLatestOrderRefund(String orderNo);

    /**
     * 根据退款单号查询退款单信息
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/12/12 1:15
     */
    OrderRefund getOrderRefundByRefundNo(String refundNo);

    /**
     * 根据第三方退款单号查询退款单
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/12/11 14:19
     */
    OrderRefund getOrderRefundByRefundId(String refundId);

    /**
     * 申请退款或退货
     *
     * @param type 退款类型 1 退款 2 退货退款
     * @author 长沙商脉科技有限公司
     * @date 2020/4/26 9:11
     * @see com.bfly.mall.order.enums.RefundTypeEnum
     */
    void applyRefund(String orderNo, RefundTypeEnum type, String reason, int opId, String opName, AccessRole role);

    /**
     * 同意订单退款申请操作
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/4/25 18:23
     */
    void shopKeeperAgreeRefundOrder(Admin admin, String refundNo);

    /**
     * 操作订单退款
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/10/8 21:25
     */
    void shopKeeperProcessRefundOrder(Admin admin, OrderRefundFormDTO formDTO);

    /**
     * 驳回订单退款申请操作
     *
     * @author 长沙商脉科技有限公司
     * @date 2020/4/25 18:47
     */
    void shopKeeperRejectRefundOrder(Admin admin, String refundNo, String remark);

    /**
     * 修改退款进度状态
     *
     * @param refundNo     商户退款单号
     * @param progressEnum 退款进度
     * @author 长沙商脉科技有限公司
     * @date 2020/12/11 14:33
     */
    void editOrderRefundStatus(String refundNo, RefundProgressEnum progressEnum);
}
